home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 201 / 201.xpi / modules / mediator.jsm < prev    next >
Text File  |  2010-01-11  |  4KB  |  153 lines

  1. /* You may find the license in the LICENSE file */
  2.  
  3. const EXPORTED_SYMBOLS = [
  4.     'getMostRecent',
  5.     'getMostRecentByUrl',
  6.     'getAllByType',
  7.     'openExternal',
  8.     'openUrl',
  9.     'showNotice',
  10. ];
  11.     
  12. const Cc = Components.classes;
  13. const Ci = Components.interfaces;
  14. const Cr = Components.results;
  15. const Cu = Components.utils;
  16. const Exception = Components.Exception;
  17.  
  18. const mediator =     Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator);
  19. const ioservice = Cc['@mozilla.org/network/io-service;1'].getService(Ci.nsIIOService);
  20. const protoservice = Cc['@mozilla.org/uriloader/external-protocol-service;1'].getService(Ci.nsIExternalProtocolService);
  21. const logger = Cc['@downthemall.net/debug-service;1'].getService(Ci.dtaIDebugService);
  22. const windowwatcher = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(Ci.nsIWindowWatcher);
  23.  
  24.  
  25. function objToString(obj) {
  26.     if (obj == null || obj == undefined) {
  27.         return obj;
  28.     }
  29.     if (
  30.         typeof obj == 'string'
  31.         || obj instanceof String
  32.     ) {
  33.         return obj.toString();
  34.     }
  35.     if (
  36.         obj instanceof Ci.nsIURL
  37.         || obj instanceof Ci.nsIURI
  38.     ) {
  39.         return obj.spec;
  40.     }
  41.     if (obj.url) {
  42.         return objToString(obj.url);
  43.     }
  44.     throw new Exception("Not a valid type");
  45. }
  46. function objToUri(obj) {
  47.     if (obj == null || obj == undefined) {
  48.         return null;
  49.     }
  50.     if (obj instanceof Ci.nsIURL || obj instanceof Ci.nsIURI) {
  51.         return obj;
  52.     }
  53.     if (typeof obj == 'string' || obj instanceof String) {
  54.         return ioservice.newURI(obj.toString(), null, null);
  55.     }
  56.     if (obj.url) {
  57.         return objToUri(obj.url);
  58.     }    
  59.     throw new Exception("Not a valid type");
  60. }
  61.  
  62. /**
  63.  * Gets the most recent window
  64.  * @param type Either a string or an array of string specifying the type of the window
  65.  */
  66. function getMostRecent(type) {
  67.     if (type instanceof Array) {
  68.         for each (t in type) {
  69.             let rv = getMostRecent(t);
  70.             if (rv) {
  71.                 return rv;
  72.             }
  73.         }
  74.     }
  75.     return mediator.getMostRecentWindow(type.toString());
  76. }
  77.  
  78. /**
  79.  * Gets the most recent window by url instead of type 
  80.  */
  81. function getMostRecentByUrl(url) {
  82.     if (!url) {
  83.         return null;
  84.     }
  85.     url = objToString(url);
  86.  
  87.     let enumerator = mediator.getEnumerator(null);
  88.     while (enumerator.hasMoreElements()) {
  89.         var win = enumerator.getNext();
  90.         if (win.location == url) {
  91.             return win;
  92.         }
  93.     }
  94.     return null;    
  95. }
  96.  
  97. function getAllByType(type) {
  98.     let rv = [];
  99.     let enumerator = mediator.getEnumerator(type);
  100.     while (enumerator.hasMoreElements()) {
  101.         rv.push(enumerator.getNext());
  102.     }
  103.     return rv;    
  104. }
  105.  
  106. function openExternal(link) {
  107.     logger.logString("Mediator: Using external handler for " + link);
  108.     protoservice.loadUrl(objToUri(link));
  109. }
  110. function openUrl(window, link, ref) {
  111.     logger.logString("Mediator: Request to open " + link);
  112.     try {
  113.         let win = getMostRecent('navigator:browser');
  114.         if (win) {
  115.             // browser
  116.             if ('delayedOpenTab' in win) {
  117.                 win.delayedOpenTab(objToString(link), objToUri(ref));
  118.                 return;
  119.             }
  120.             win.getBrowser().addTab(objToString(link), objToString(ref));
  121.             return;
  122.         }
  123.         win = getMostRecent('Songbird:Main');
  124.         if (win) {
  125.             // Songbird
  126.             let tb = win.document.getElementById('content');
  127.             if (tb) {
  128.                 tb.loadOneTab(objToString(link), objToUri(ref), null, null, null);
  129.                 return;
  130.             }
  131.         }
  132.     }
  133.     catch (ex) {
  134.         logger.log('Mediator: Failed to open tab', ex);
  135.     }
  136.     try {
  137.         window.open(objToString(link));
  138.     }
  139.     catch (ex) {
  140.         logger.log('Mediator: Failed to open window', ex);
  141.         openExternal(link);
  142.     }
  143. }
  144.  
  145. function showNotice(window, params) {
  146.     windowwatcher.openWindow(
  147.         window,
  148.         'chrome://dta/content/about/notice.xul',
  149.         '_blank',
  150.         'chrome,centerscreen,all,dialog,modal',
  151.         params
  152.         );
  153. }